sunshine moonlight 配置linux第二屏幕

·

安装sunshine和moonlight

# 服务端安装sunshine(需要扩展屏幕主机)
# https://github.com/LizardByte/Sunshine/releases/tag/v2025.924.154138
sudo apt install ./sunshine-ubuntu-24.04-amd64.deb

# 客户端安装moonlight(作为第二屏幕的主机)
sudo flatpak install com.moonlight_stream.Moonlight

虚拟显示器?

使用 Wayland + vkms + Weston headless

modinfo vkms | grep filename
sudo modprobe vkms
ls /sys/class/drm | grep card

# /etc/modprobe.d/vkms.conf
# 示例:创建两个 vkms 虚拟显示器
options vkms nodes=2

sudo apt install libdrm-tests
modetest -M vkms | grep -i connect
sudo apt install wlroots-utils
vainfo --display drm --device /dev/dri/renderD128
pactl info
sudo apt install -y x11-xserver-utils weston
# 主要是 modetest 检查 DRM 输出,Wayland 原生可以使用 wlr-randr 或 Weston 的虚拟输出测试
weston --backend=headless-backend.so --socket=wayland-headless-0
sudo apt install edid-decode read-edid
sudo get-edid > /lib/firmware/edid/1080p.bin

sudo tee /etc/modprobe.d/vkms.conf <<'EOF'
options vkms enable_cursor=1 enable_overlay=1 edid_firmware=edid/1080p.bin
EOF

sudo modprobe -r vkms
sudo modprobe vkms

cat /sys/class/drm/card0-Virtual-1/edid | edid-decode

sudo cat /sys/kernel/debug/dri/0/state
modetest -M vkms -s 63@38:1920x1080

sudo udevadm trigger --subsystem-match=drm --action=change
sudo apt install drm-info
drm_info /dev/dri/card0

debian13 中没有vkms?

特性vkmsvirtio-gpuqxldummy X11
驱动位置内核 DRM内核 DRM内核 DRM用户态 X11
显示输出✅ DRM 原生✅ DRM 原生✅ DRM 原生❌ 无 DRM 节点
硬件依赖无(纯虚拟)需虚拟化环境需 QEMU/SPICE
性能软件模拟,较慢中等中等
Sunshine 兼容⚠️ 需 Xwayland
GNOME 可识别

配置KMS

  • 在电脑上安装 Sunshine,平板上安装 Moonlight,确保能搜索到并能正常控制电脑;
  • 用下面的命令枚举所有设备接口的连接情况,选择一个未连接(disconnected)的 HDMI 接口(如 HDMI-A-1),记下它:
for p in /sys/class/drm/*/status; do con=${p%/status}; echo -n "${con#*/card?-}: "; cat $p; done 
  • 在 /usr/lib/firmware/ 下创建一个新的 edid 目录(如果没有),并将你的 edid 文件放在那里。例如 /usr/lib/firmware/edid/samsung-q800t-hdmi2.1;
  • 编辑内核参数,添加以下内容。其中 HDMI-A-1 是你选择的接口,edid/samsung-q800t-hdmi2.1 是你的 EDID 文件。注意不要漏了最后的 :e:
  • drm.edid_firmware=HDMI-A-1:edid/samsung-q800t-hdmi2.1 video=HDMI-A-1:e
  • 重启电脑。如果一切正常,你的电脑会认为有一个新的 HDMI 显示器连接上了,而实际上它是一个虚拟显示器;
  • 在命令行中运行 sunshine,查看其输出的 KMS Monitor List,找到你的 HDMI 接口对应的编号,停止 Sunshine;
  • 在正常启动的 Sunshine 的设置中填入上一步的编号,应用设置,确定其投屏的来源是你的虚拟显示器。
  • 这样就完成了,你可以在 KDE 设置中像普通显示器那样配置该虚拟显示器的分辨率和空间位置,甚至可以在不用时禁用该显示器。